/**
 * Index Ts主要是用来处理一些数据得公用方法
 */

/**
 * @description: 基于list集合的递归方法
 * @param {Object<any>} list 集合数组
 * @param {string} id 数据id
 * @param {string} parentId 数据父id
 * @return {Object<any>} 返回树结果
 */
interface Item {
	children?: any
	id?: any
	parentId?: any
	code?: any
	menuType?: any
	permission?: any
}

export function translateDataToTree(list: Array<Item>, mainBodyId?: string) {
	if (list) {
		const arr = [...list]
		arr?.forEach((it) => {
			// eslint-disable-next-line no-param-reassign
			delete it.children
		})
		// 定义map/
		const map: any = {}
		// 这里可以重构数据类型，放回字段值
		arr?.forEach((it) => {
			map[it?.id] = it
		})

		// 定义返回集合
		const val: any = []
		arr?.forEach((it) => {
			const parent = map[it.parentId]
			if (parent) {
				// 有数据说明不是顶级节点，将数据放到该 children 子节点下
				; (parent.children || (parent.children = [])).push(it)
			} else {
				// 没有数据说明是顶级节点放到val中
				val.push(it)
			}
		})
		return val
	}
	return ''
}

export function foreachToTree(list: Array<Item>) {
	const arr = [...list]

	for (const i in arr) {
		const data = arr[i]
		if (data.children) {
			if (data.menuType === 1) {
				data.permission = data?.children?.map(
					(item: any) => item.code || '',
				)
				delete data?.children
			} else {
				foreachToTree(data.children) // 自己调用自己
			}
		}
	}
}

export function getSupplierType(arr: any[]) {
	const newArr: any[] = [
		{
			value: 'ZC_GYS',
			label: '直采供应商',
			children: [],
		},
		{
			value: 'JC_GYS',
			label: '间采供应商',
			children: [],
		},
		{
			value: 'CZ_GYS',
			label: '处置供应商',
			children: [],
		},
		{
			value: 'SP_GYS',
			label: 'SP渠道供应商',
			children: [],
		},
		{
			value: 'DYY_GYS',
			label: '代运营资产方',
			children: [],
		},
		{
			value: 'CS_GYS',
			label: '车司平台',
			children: [],
		},
	]
	arr.forEach((item1, index) => {
		if (item1?.length) {
			item1.forEach((item2: { dictKey: any; dictValue: any }) => {
				newArr[index].children.push({
					value: item2?.dictKey,
					label: item2?.dictValue,
				})
			})
		}
	})
	return newArr
}

export function getEditTableSelect(arr: any[], type?: string) {
	if (type === 'number') {
		const newArr: any = {}
		arr?.forEach((item) => {
			newArr[item.dictKey] = Number(item.dictValue)
		})
		return newArr
	}
	const newArr: any = {}
	arr?.forEach((item) => {
		newArr[item.dictKey] = item.dictValue
	})
	return newArr
}

export function getEditSelect(arr: any[], key: any, value: any) {
	const newArr: any = {}
	arr?.forEach((item) => {
		newArr[item[key]] = item[value]
	})
	return newArr
}

export function numberStrFormat(str: string | number) {
	const arr = str.toString().split('').reverse()
	const result = []
	for (let i = 0; i < arr.length; i += 1) {
		result.push(arr[i])
		if ((i + 1) % 3 === 0 && i + 1 !== arr.length) {
			result.push(',')
		}
	}
	return result.reverse().join('')
}

// data：要遍历的数据， target：查找目标， result用于装查找结果的数组
// export function findParent(data: any, target: any, result: any) {
// 	for (const i in data) {
// 		const item = data[i]
// 		if (item.id === target) {
// 			// 将查找到的目标数据加入结果数组中
// 			// 可根据需求unshift(item.id)或unshift(item)
// 			result.unshift(item.id)
// 			return true
// 		}
// 		if (item.children && item.children.length > 0) {
// 			const ok = findParent(item.children, target, result)
// 			if (ok) {
// 				result.unshift(item.id)
// 				return true
// 			}
// 		}
// 	}
// 	// 走到这说明没找到目标
// 	return false
// }

export function findParent(data: any, target: any, result: any) {
	for (const i in data) {
		const item = data[i]
		if (item.id === target) {
			// 将查找到的目标数据加入结果数组中
			// 可根据需求unshift(item.id)或unshift(item)
			result.unshift(item.id)
			return true
		}
		if (item.children && item.children.length > 0) {
			const ok = findParent(item.children, target, result)
			if (ok) {
				result.unshift(item.id)
				return true
			}
		}
	}
	// 走到这说明没找到目标
	return false
}
export function modelSeriesFun(data: any,) {
	const newData = data?.map((item: { id: any }) => ({
		...item,
		id: Number(item?.id)
	}))
	return newData
}



export default {
	translateDataToTree,
	getSupplierType,
	getEditTableSelect,
	numberStrFormat,
	findParent,
	modelSeriesFun
}
